spring boot 连接rabbitMQ 失败汇总与解决 | 您所在的位置:网站首页 › actually of › spring boot 连接rabbitMQ 失败汇总与解决 |
花了两天的时间来解决这个BUG,汇总了网上大多数的解决办法与结果, 很重要的前提:首先查看服务器对应的端口是否开放,如15672和5672,是否添加入站规则 问题描述:采用guest可以连接访问rabbitmq,使用其他账户连接rabbitmq失败(其他账户均已经分配虚拟机和权限,并且可以登录管理页面,说明账号密码没有错误) 报错截图如下 2021-05-13 09:11:28.605 INFO 39320 --- [ main] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [118.192.69.111:5672] 2021-05-13 09:11:28.880 INFO 39320 --- [ main] o.s.a.r.l.SimpleMessageListenerContainer : Broker not available; cannot force queue declarations during start: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile. 2021-05-13 09:11:28.880 ERROR 39320 --- [192.69.111:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured java.net.SocketException: Socket Closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:150) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:121) ~[na:1.8.0_11] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_11] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_11] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_11] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:184) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:665) ~[amqp-client-5.10.0.jar:5.10.0] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11] 2021-05-13 09:11:28.880 INFO 39320 --- [ntContainer#0-1] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [118.192.69.111:5672] 2021-05-13 09:11:29.134 ERROR 39320 --- [192.69.111:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured java.net.SocketException: socket closed at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:150) ~[na:1.8.0_11] at java.net.SocketInputStream.read(SocketInputStream.java:121) ~[na:1.8.0_11] at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_11] at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_11] at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_11] at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:184) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:665) ~[amqp-client-5.10.0.jar:5.10.0] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11] 2021-05-13 09:11:29.134 ERROR 39320 --- [ntContainer#0-1] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s). org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile. at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:64) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:602) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:724) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:216) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2132) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2105) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2085) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueInfo(RabbitAdmin.java:407) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:391) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.attemptDeclarations(AbstractMessageListenerContainer.java:1890) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.redeclareElementsIfNecessary(AbstractMessageListenerContainer.java:1871) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1346) [spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1192) [spring-rabbit-2.3.6.jar:2.3.6] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_11] Caused by: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile. at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:385) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1139) ~[amqp-client-5.10.0.jar:5.10.0] at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1087) ~[amqp-client-5.10.0.jar:5.10.0] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connectAddresses(AbstractConnectionFactory.java:638) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connect(AbstractConnectionFactory.java:613) ~[spring-rabbit-2.3.6.jar:2.3.6] at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:565) ~[spring-rabbit-2.3.6.jar:2.3.6] ... 12 common frames omitted 好了,开始面向百度解决:第一种说法:有的说是spring.rabbitmq.connection-timeout 设置过小,导致连接超时,未建立连接解决办法是把改参数的值该大一点直接把它设置为0,0表示永远等待,即连接永不超时。 报错依旧!!! 第二种说法: 说spring boot配置文件的virtual-host和rabbitMQ上的不一致 重新给admin账号创建一个名为myHost的virtual-host,并在spring boot的配置文件中进行添加,如图 spring boot 配置文件 rabbitmq管理页面 报错依旧!!! 第三种说法: 当前使用的版本和spring boot 版本不匹配,把pom中对rabbitmq依赖的版本改成和spring boot 对应的版本,比如说我安装的rabbitmq是3.6.15版本,查了下是17年左右发布的,当时springboot还是1.5.x版本,然后把依赖换成1.5.10release版本 如图: spring boot 版本 目前我使用的spring boot 版本是2.4.4,目前最新的也就到就2.4.5而已,而我使用的rabbit也是3.8.14,离最新的3.8.16版本相隔时间也不到一个月的时间,而且在本地是可以完全使用的,只不过连接远程服务不得而已,所以版本的问题完全可以排除。 image.png rabbitmq版本 问题依旧!!! 第四种说法: 将连接端口进行修改,即将5672修改成其他端口,如5673 spring boot rabbitMQ连接端口修改 问题依旧!!! 其实没有必要在配置文件中在另外添加端口监听,因为在配置文件中有这么一句 By default, RabbitMQ will listen on all interfaces, using the standard (reserved) AMQP port. 最终解决:最后看到一篇博客,才找到了原因,他是通过命令的方式添加用户分配虚拟机和权限 rabbitmqctl add_user username passwd //添加用户,后面两个参数分别是用户名和密码 rabbitmqctl set_permissions -p / username ".*" ".*" ".*" //添加权限 rabbitmqctl set_user_tags username administrator //修改用户角色,将用户设为管理员 我抱着不可能的心态直接Ctrl+C Ctrl+V ,结果居然成功的连接上了经过排查,是原来我设置密码的时候,都是用了数字,后面修改就得了真是蛋疼的操作!!!! |
CopyRight 2018-2019 实验室设备网 版权所有 |